import java.util.ArrayList;
import java.util.List;

/**
 * Created by L.jp
 * Description:给你一个 m 行 n列的二维网格grid和一个整数k。你需要将grid迁移k次。
 *
 * 每次「迁移」操作将会引发下述活动：
 *
 * 位于 grid[i][j]的元素将会移动到grid[i][j + 1]。
 * 位于grid[i][n- 1] 的元素将会移动到grid[i + 1][0]。
 * 位于 grid[m- 1][n - 1]的元素将会移动到grid[0][0]。
 * 请你返回k 次迁移操作后最终得到的 二维网格。
 * User: 86189
 * Date: 2021-10-17
 * Time: 17:17
 */
public class Mesh {
        public List<List<Integer>> shiftGrid(int[][] grid, int k) {

            while (k > 0) {
                int[][] newGrid = new int[grid.length][grid[0].length];
                //1.同一行移动的情况
                for (int i = 0; i < grid.length; i++) {
                    for (int j = 0; j < grid[0].length - 1; j++) {
                        newGrid[i][j + 1] = grid[i][j];
                    }
                }
                //2.前n-1行，最后面一列需要移动下一行的第一个元素,newgrid[1到(n-1)][0] =grid[(0到（n-2)][m-1]
                for (int i = 0; i < grid.length - 1; i++) {
                    newGrid[i + 1][0] = grid[i][grid[0].length - 1];
                }
                //3.最后一行，最后一列元素移动到第一行第一个元素newgrid[0][0] = grid[n-1][m-1];
                newGrid[0][0] = grid[grid.length - 1][grid[0].length - 1];

                grid = newGrid;//将移动好的数据放回原来的二维网格
                k--;
            }
            //打印
            //建立一个二维数组
            List<List<Integer>> result = new ArrayList<>();
            for (int[] row : grid) {//二维数组每个元素是一个一维数组
                List<Integer> listRow = new ArrayList<>();
                result.add(listRow);//把一维数组装入result二维数组
                for (int v : row) listRow.add(v);//嵌套二维数组把每个元素装入一维数组
            }
            return result;
        }
    }

}